package com.zbkj.common.utils;

import cn.hutool.core.util.StrUtil;

/**
 * 条形码EAN-13工具类
 */
public class Ean13Util {


    /**
     * 前缀码（3位）：中国商品：690-695 。其他国家：法国 30-37，德国 400-440 等
     * 厂商代码（4-6位）：向 中国物品编码中心 申请（www.ancc.org.cn）
     * 产品代码（3-5位）：厂商自定义
     * 校验位（1位）：自动计算
     * 根据12位数计算校验位并返回13位数
     *
     * @param number
     * @return
     */
    public static String getEan13(String number) {
        if (StrUtil.isBlank(number) || number.length() != 12) {
            return "number数不对";
        }
        // 计算奇偶位和
        //奇
        int oddSum = 0;
        //偶
        int evenSum = 0;
        for (int i = 0; i < number.length(); i++) {
            int digit = Character.getNumericValue(number.charAt(i));
            // 位置1开始：索引0=位置1(奇), 索引1=位置2(偶)
            if (i % 2 == 0) {
                oddSum += digit;
            } else {
                evenSum += digit;
            }
        }
        //计算校验位
        Integer total = oddSum + evenSum;
        Integer a = (10 - total % 10) % 10;
//        Integer a = 10 - ((oddSum + evenSum) % 10);
        return StrUtil.format("{}{}", number, a);

    }


    public static void main(String[] args) {
        String ean13 = getEan13("690931471012");
        System.out.println(ean13);
    }

}
